/**
 * @brief FIFO测试文件。FIFO单元为byte。
 *        使用函数fifo_write和fifo_read来读写FIFO
 *
 */
#include <stdio.h>
#include <stdlib.h>
//#include <stdint.h>

/*  includes    */
#include "../src/mf_fifo.h"
/*  includes    */


/**< 变量定义 */
#define DATA_SIZE   20U     // 数据 buffer 大小
u8 buf[DATA_SIZE];          // 定义数据 buffer
/**< 变量定义 */

int main()
{
    uint16_t i = 0U;
    u8 msg, *pmsg;

    FIFO_t fifo;    // 定义 FIFO

    /*  FIFO 初始化    */
    if(fifo_init(&fifo, buf, sizeof(buf[0]), sizeof(buf)/sizeof(buf[0])) == MF_TRUE)
    {
        printf("FIFO 初始化成功!\n\tunit:%d\t\tsize:%d\n\n",
               fifo_unit(&fifo), fifo_size(&fifo));
    }
    else
    {
        printf("FIFO 初始化失败!\n");
//        getchar();
        return 0U;
    }

    /*  向 FIFO 写数据    */
    printf("FIFO 写数据:\n\tlength:%d\n\n",fifo_len(&fifo));
    while(!FIFO_IS_FULL(&fifo))
    {
        msg = i;

        if(fifo_write(&fifo, &msg) == MF_TRUE)
        {
            printf("%d\n",msg);
        }
        else
        {
            printf("FIFO 写数据失败!\n\tlength:%d\n",fifo_len(&fifo));
            return 0U;
        }
        i++;
    }
    printf("\n\n\tlength:%d\n",fifo_len(&fifo));

    /*  从 FIFO 读数据    */
    printf("\n\nFIFO 读数据:\n\tlength:%d\n\n", fifo_len(&fifo));
    while(!FIFO_IS_EMPTY(&fifo))
    {
        pmsg = (u8 *)fifo_read(&fifo);
        if(pmsg != MF_NULL)
        {
            printf("%d\n",*pmsg);
        }
        else
        {
            printf("FIFO 读数据失败!\n\tlength:%d\n",fifo_len(&fifo));
            return 0U;
        }
    }
    printf("\n\n\tlength:%d\n",fifo_len(&fifo));

    printf("\n\nFIFO 读写数据成功！\n\tlength:%d\n",fifo_len(&fifo));

    return 0U;
}

